@page "/effect-test"
@using jiuyuan.服务
@using jiuyuan.数据.基础数据类
@using jiuyuan.管理器
@using jiuyuan.数据.玩家类

<PageTitle>效果测试页面</PageTitle>

<div class="container">
    <h2>效果管理系统测试</h2>
    
    <div class="card">
        <h3>创建新效果</h3>
        <div class="form-group">
            <label>效果名称:</label>
            <input type="text" @bind="新效果.名称" class="form-control" />
        </div>
        <div class="form-group">
            <label>效果类型:</label>
            <select @bind="新效果.效果类型" class="form-control">
                @foreach (var type in 效果类型列表)
                {
                    <option value="@type">@type</option>
                }
            </select>
        </div>
        <div class="form-group">
            <label>描述:</label>
            <textarea @bind="新效果.描述" class="form-control"></textarea>
        </div>
        <button class="btn-primary" @onclick="创建效果">创建效果</button>
    </div>
    
    <div class="card">
        <h3>现有效果列表</h3>
        <ul>
            @foreach (var effect in 效果列表)
            {
                <li>
                    <strong>@effect.名称</strong> (@effect.效果类型) - @effect.描述
                    <button class="btn-secondary small" @onclick="() => 删除效果(effect.Id)">删除</button>
                </li>
            }
        </ul>
    </div>
    
    <div class="card">
        <h3>测试动态效果</h3>
        <div class="form-group">
            <label>选择测试角色:</label>
            <select @bind="选中角色Id" class="form-control">
                @foreach (var character in 角色列表)
                {
                    <option value="@character.Id">@character.名称</option>
                }
            </select>
        </div>
        <div class="form-group">
            <label>选择测试效果:</label>
            <select @bind="选中效果Id" class="form-control">
                @foreach (var effect in 效果列表)
                {
                    <option value="@effect.Id">@effect.名称</option>
                }
            </select>
        </div>
        <button class="btn-primary" @onclick="测试效果">测试效果</button>
    </div>
    
    @if (!string.IsNullOrEmpty(测试结果))
    {
        <div class="card">
            <h3>测试结果</h3>
            <p>@测试结果</p>
        </div>
    }
</div>

@code {
    [Inject] public 效果管理器 效果管理器 { get; set; } = default!;
    [Inject] public ILogger<效果测试页面> Logger { get; set; } = default!;
    
    private 效果配置 新效果 = new 效果配置();
    private List<效果配置> 效果列表 = new List<效果配置>();
    private List<string> 效果类型列表 = new List<string> { "伤害", "治疗", "速度减益", "属性增益" };
    private List<战斗单位> 角色列表 = new List<战斗单位>();
    private Guid 选中角色Id = Guid.Empty;
    private Guid 选中效果Id = Guid.Empty;
    private string 测试结果 = "";
    
    protected override void OnInitialized()
    {
        // 初始化新效果
        新效果.Id = Guid.NewGuid();
        新效果.名称 = "测试效果";
        新效果.效果类型 = "伤害";
        新效果.描述 = "这是一个测试效果";
        新效果.触发时机 = "立即";
        新效果.触发概率 = 1.0f;
        新效果.持续回合数 = 0;
        新效果.是否启用 = true;
        新效果.参数 = new Dictionary<string, object>();
        
        // 添加一些默认参数
        新效果.参数["伤害值"] = 10;
        新效果.参数["伤害系数"] = 1.0f;
        
        // 初始化角色列表（模拟数据）
        初始化角色列表();
        
        // 加载现有效果
        加载效果列表();
    }
    
    private void 初始化角色列表()
    {
        // 创建测试角色
        var 玩家1 = new 玩家
        {
            Id = Guid.NewGuid(),
            名称 = "测试玩家1",
            基础属性 = new 属性配置
            {
                生命值 = 100,
                魔法值 = 50,
                物理攻击 = 20,
                物理防御 = 10,
                火属性攻击 = 15,
                水属性攻击 = 10,
                风属性攻击 = 8,
                土属性攻击 = 5,
                速度 = 12
            }
        };
        玩家1.当前属性 = 玩家1.基础属性.深拷贝();
        玩家1.当前生命值 = 玩家1.当前属性.生命值;
        玩家1.当前魔法值 = 玩家1.当前属性.魔法值;
        
        var 玩家2 = new 玩家
        {
            Id = Guid.NewGuid(),
            名称 = "测试玩家2",
            基础属性 = new 属性配置
            {
                生命值 = 120,
                魔法值 = 40,
                物理攻击 = 18,
                物理防御 = 15,
                火属性攻击 = 10,
                水属性攻击 = 12,
                风属性攻击 = 6,
                土属性攻击 = 8,
                速度 = 10
            }
        };
        玩家2.当前属性 = 玩家2.基础属性.深拷贝();
        玩家2.当前生命值 = 玩家2.当前属性.生命值;
        玩家2.当前魔法值 = 玩家2.当前属性.魔法值;
        
        角色列表.Add(玩家1);
        角色列表.Add(玩家2);
        
        if (角色列表.Any())
        {
            选中角色Id = 角色列表.First().Id;
        }
    }
    
    private void 加载效果列表()
    {
        效果列表 = 效果管理器.获取所有效果配置();
        if (效果列表.Any())
        {
            选中效果Id = 效果列表.First().Id;
        }
    }
    
    private async Task 创建效果()
    {
        try
        {
            新效果.创建时间 = DateTime.Now;
            新效果.更新时间 = DateTime.Now;
            
            await 效果管理器.保存效果配置(新效果);
            
            // 重置表单
            新效果 = new 效果配置
            {
                Id = Guid.NewGuid(),
                名称 = "新效果",
                效果类型 = "伤害",
                描述 = "",
                触发时机 = "立即",
                触发概率 = 1.0f,
                持续回合数 = 0,
                是否启用 = true,
                参数 = new Dictionary<string, object>()
            };
            
            // 重新加载效果列表
            加载效果列表();
            
            测试结果 = "效果创建成功！";
        }
        catch (Exception ex)
        {
            Logger.LogError(ex, "创建效果时发生错误");
            测试结果 = $"创建效果失败: {ex.Message}";
        }
    }
    
    private async Task 删除效果(Guid 效果Id)
    {
        try
        {
            await 效果管理器.删除效果配置(效果Id);
            加载效果列表();
            测试结果 = "效果删除成功！";
        }
        catch (Exception ex)
        {
            Logger.LogError(ex, "删除效果时发生错误");
            测试结果 = $"删除效果失败: {ex.Message}";
        }
    }
    
    private async Task 测试效果()
    {
        try
        {
            // 获取选中的角色和效果
            var 角色 = 角色列表.FirstOrDefault(c => c.Id == 选中角色Id);
            var 效果配置 = 效果列表.FirstOrDefault(e => e.Id == 选中效果Id);
            
            if (角色 == null || 效果配置 == null)
            {
                测试结果 = "请选择有效的角色和效果";
                return;
            }
            
            // 创建效果实例
            var 效果实例 = 效果管理器.创建效果(效果配置);
            
            if (效果实例 == null)
            {
                测试结果 = "无法创建效果实例";
                return;
            }
            
            // 应用效果（模拟目标为自己）
            var 目标列表 = new List<战斗单位> { 角色 };
            效果实例.应用效果(角色, 目标列表, null, null);
            
            测试结果 = $"效果 '{效果配置.名称}' 应用成功！角色当前生命值: {角色.当前生命值}/{角色.当前属性.生命值}";
        }
        catch (Exception ex)
        {
            Logger.LogError(ex, "测试效果时发生错误");
            测试结果 = $"测试效果失败: {ex.Message}";
        }
    }
}